home *** CD-ROM | disk | FTP | other *** search
- /* GadTools layout toolkit
- **
- ** Copyright © 1993-1995 by Olaf `Olsen' Barthel
- ** Freely distributable.
- */
-
- #include "gtlayout_global.h"
-
- WORD __regargs
- LTP_Find_Clicked_Item(LayoutHandle *handle,ObjectNode *radio,LONG x,LONG y)
- {
- if(x >= radio -> Left + INTERWIDTH)
- {
- WORD i,top = radio -> Top,height,single;
-
- height = ((radio -> Height + handle -> InterHeight) / radio -> Lines);
- single = height - handle -> InterHeight;
-
- for(i = 0 ; i <= radio -> Max ; i++)
- {
- if(y >= top && y < top + single)
- return(i);
- else
- top += height;
- }
- }
-
- return(-1);
- }
-
-
- /*****************************************************************************/
-
-
- ObjectNode * __regargs
- LTP_FindNode_Position(ObjectNode *group,LONG x,LONG y)
- {
- ObjectNode *node;
- ULONG page;
-
- SCANPAGE(group,node,page)
- {
- if(node -> Type == GROUP_KIND)
- {
- ObjectNode *result;
-
- if(result = LTP_FindNode_Position(node,x,y))
- return(result);
- else
- {
- if(node -> Top <= y && node -> Top + node -> Height > y && node -> Left <= x && node -> Left + node -> Width > x)
- {
- while(node)
- {
- if(node -> ID <= PHANTOM_GROUP_ID)
- node = node -> Special . Group . ParentGroup;
- else
- return(node);
- }
-
- return(NULL);
- }
- }
- }
- else
- {
- if(node -> Top <= y && node -> Top + node -> Height > y)
- {
- switch(node -> Type)
- {
- case CHECKBOX_KIND:
-
- if(node -> LabelPlace == PLACE_LEFT)
- {
- if(node -> Left - (node -> LabelWidth + INTERWIDTH) <= x && node -> Left - INTERWIDTH > x)
- return(node);
- }
- else
- {
- if(node -> Left + node -> Width + INTERWIDTH <= x && node -> Left + node -> Width + INTERWIDTH + node -> LabelWidth > x)
- return(node);
- }
-
- break;
-
- case MX_KIND:
-
- if(node -> Left + node -> Width + INTERWIDTH <= x && node -> Left + node -> Width + INTERWIDTH + node -> Special . Radio . LabelWidth > x)
- return(node);
-
- break;
-
- default:
-
- if(node -> Left <= x && node -> Left + node -> Width > x)
- {
- if(node -> Type == PICKER_KIND)
- return(node -> Special . Picker . Parent -> UserData);
-
- if(node -> Type == INCREMENTER_KIND)
- return(node -> Special . Incrementer . Parent -> UserData);
-
- return(node);
- }
- }
- }
- }
- }
-
- return(NULL);
- }
-
-
- /*****************************************************************************/
-
-
- ObjectNode * __regargs
- LTP_FindNode(ObjectNode *group,LONG id)
- {
- ObjectNode *node;
- ObjectNode *result;
-
- SCANGROUP(group,node)
- {
- if(node -> Type == GROUP_KIND)
- {
- if(node -> ID == id)
- return(node);
-
- if(result = LTP_FindNode(node,id))
- return(result);
- }
- else
- {
- if((node -> ID == id) && (node -> Type != PICKER_KIND) && (node -> Type != INCREMENTER_KIND))
- return(node);
- }
- }
-
- return(NULL);
- }
-
-
- /*****************************************************************************/
-
-
- struct Gadget * __regargs
- LTP_FindGadget(LayoutHandle *handle,LONG id)
- {
- if(handle && handle -> GadgetArray)
- {
- LONG i = handle -> Count;
-
- while(i--)
- {
- if(handle -> GadgetArray[i])
- {
- if(handle -> GadgetArray[i] -> GadgetID == id && handle -> GadgetArray[i] -> UserData)
- {
- register struct ObjectNode *Node = (struct ObjectNode *)handle -> GadgetArray[i] -> UserData;
-
- if(Node -> PointBack == Node && Node -> Host == handle -> GadgetArray[i])
- return(handle -> GadgetArray[i]);
- }
- }
- }
- }
-
- return(NULL);
- }
-